/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package BancoDados;

import Utilidades.UtilityDB;
import java.sql.ResultSet;
import java.util.Date;
import javax.naming.spi.DirStateFactory.Result;
import javax.swing.text.Utilities;

/**
 * Created on : Jun 20, 2011, 7:45:01 PM
 * @author diogo
 * create table users (
id	serial primary key,
nome	dm_nome,
tipo	char(1) check (tipo = 'C' or tipo = 'P' or tipo = 'O'),
codigo	integer,
email	dm_local,
ativo	boolean default true,
login	varchar(10),
senha	varchar(15) default ''
)
 */
public class Usuario extends Dado implements Entidade {

	private int id;
	private String nome;
	private String tipo;
	private int codigo;
	private String email;
	private boolean ativo;
	private String login;
	private String senha;

	// <editor-fold defaultstate="collapsed" desc="Gets/Constructors">
	public Usuario(int id, String nome, String tipo, int codigo, String email, boolean ativo, String login, String senha) {
		this.id = id;
		this.nome = nome;
		this.tipo = tipo;
		this.codigo = codigo;
		this.email = email;
		this.ativo = ativo;
		this.login = login;
		this.senha = senha;
	}

	public Usuario(int id) {
		this.id = id;
	}

	public Usuario() {
	}

	public boolean isAtivo() {
		return ativo;
	}

	public int getCodigo() {
		return codigo;
	}

	public String getEmail() {
		return email;
	}

	public int getId() {
		return id;
	}

	public String getLogin() {
		return login;
	}

	public String getNome() {
		return nome;
	}

	public String getSenha() {
		return senha;
	}

	public String getTipo() {
		return tipo;
	}
	// </editor-fold>

	@Override
	public String getTableName() {
		return "users";
	}

	@Override
	public String[] getPrimaryKey() {
		return new String[]{"id"};
	}

	@Override
	public String[] getColumns() {
		return new String[]{
					"nome",
					"tipo",
					"codigo",
					"email",
					"ativo",
					"login",
					"senha"
				};
	}

	public static Usuario Login(String login, String senha) {
		Usuario u = new Usuario();
		String SQL = UtilityDB.CreateSelect(u.getTableName()) + " WHERE "
				+ UtilityDB.Compare("login", login, true, UtilityDB.EQUAL) + " AND "
				+ UtilityDB.Compare("senha", senha, true, UtilityDB.EQUAL);
		try {
			ResultSet rs = c.consultar(SQL);

			if (rs.next()) {
				int id = rs.getInt("id");
				String nome = rs.getString("nome");
				String tipo = rs.getString("tipo");
				int codigo = rs.getInt("codigo");
				String email = rs.getString("email");
				boolean ativo = rs.getBoolean("ativo");
				//System.out.println("ACHOU USUARIO");
				u = new Usuario(id, nome, tipo, codigo, email, ativo, login, senha);

			} else {
				//System.out.println("NAO ACHOU USUARIO");
				u = null;
			}
		} catch (Exception e) {
			//System.out.println("NAO ACHOU USUARIO");
			u = null;
		}

		return u;

	}

	public Cliente getCliente() {

		Cliente cli = new Cliente();
		if (this.getTipo().equals("C")) {
			//System.out.println("");
			
			String SQL = UtilityDB.CreateSelect(cli.getTableName(), cli.getPrimaryKey()[0], this.getCodigo());
			
			try {
				ResultSet rs = c.consultar(SQL, 1);
				if (rs.next()){
					
					String NomeCli =	rs.getString("NomeCli");
					String Fantasia =	rs.getString("Fantasia");
					String Endereco =	rs.getString("Endereco");
					String Bairro =		rs.getString("Bairro");
					String Cidade =		rs.getString("Cidade");
					String UF =			rs.getString("UF");
					String FoneFixo =	rs.getString("FoneFixo");
					String FoneFax =	rs.getString("FoneFax");
					String FoneCelular = rs.getString("FoneCelular");
					String Email =		rs.getString("Email");
					String HomePage =	rs.getString("HomePage");
					String Tipo =		rs.getString("Tipo");
					Date DataNasctoAbertura = rs.getDate("DataNasctoAbertura");
					String CPFCNPJ =	rs.getString("CPFCNPJ");
					String RGIE =		rs.getString("RGIE");
					
					cli = new Cliente(this.getCodigo(), NomeCli, Fantasia, Endereco, Bairro, Cidade, UF, FoneFixo, FoneFax, FoneCelular, Email, HomePage, Tipo, DataNasctoAbertura, CPFCNPJ, RGIE);
				}
				
			} catch (Exception e) {
				cli = null;
			}
		} else {
			cli = null;
		}
		return cli;
	}


	public Profissional getProfissional() {

		Profissional prof = new Profissional();
		if (this.getTipo().equals("P")) {
			//System.out.println("");

			String SQL = UtilityDB.CreateSelect(prof.getTableName(), prof.getPrimaryKey()[0], this.getCodigo());

			try {
				ResultSet rs = c.consultar(SQL, 1);
				if (rs.next()){
					String CPF = 			rs.getString("CPF");
					String Nome = 			rs.getString("Nome");
					String Fantasia = 		rs.getString("Fantasia");
					String Sexo = 			rs.getString("Sexo");
					String FoneFixo = 		rs.getString("FoneFixo");
					String FoneCel = 		rs.getString("FoneCel");
					String Endereco = 		rs.getString("Endereco");
					String Bairro = 		rs.getString("Bairro");
					String Cidade = 		rs.getString("Cidade");
					String UF = 			rs.getString("UF");
					String RG_Num = 		rs.getString("RG_Num");
					String RG_Org_Exp = 	rs.getString("RG_Org_Exp");
					Date RG_Data_Exp = 		rs.getDate("RG_Data_Exp");
					String CarteiraProfissional = rs.getString("CarteiraProfissional");
					String CNH_Registro = 	rs.getString("CNH_Registro");
					String CNH_Cat = 		rs.getString("CNH_Cat");
					Date CNH_Vencto = 		rs.getDate("CNH_Vencto");
					boolean Alocado =			rs.getBoolean("Alocado");

					prof = new Profissional(this.getCodigo(), CPF, Nome, Fantasia, Sexo, FoneFixo, FoneCel, Endereco, Bairro, Cidade, UF, RG_Num, RG_Org_Exp, RG_Data_Exp, CarteiraProfissional, CNH_Registro, CNH_Cat, CNH_Vencto, CNH_Vencto, Alocado);
				}
			} catch (Exception e) {
				prof = null;
			}
		} else {
			prof = null;
		}
		return prof;
	}

	/**
	 * retorna true se ja tem o cpf
	 * @param Login
	 * @return
	 */
	public static boolean ExisteLogin(String Login){
		ResultSet rs = null;
		boolean resultado = true;
		//fn_existe_profissional_CPF
		String SQL = UtilityDB.CallFunction("fn_existe_users_login", Login);
		try {
			rs = c.consultar(SQL);
			rs.next();
			resultado = rs.getBoolean(1);
		} catch (Exception e) {
			resultado = false;
		}

		return resultado;
	}
	/*
	public static void main(String[] args) {
		System.out.println("ExisteLogin? " + ExisteLogin("admin"));

		Usuario u = Usuario.Login("diogo", "senha");
		// Tipo do usuario:
		System.out.println("Tipo:" + u.getTipo());


		// PROFISSIONAL
		Profissional prof = u.getProfissional();
		System.out.println("Nome do Profissional: " + prof.getNome());
		// CLIENTE
		Usuario u2 = Usuario.Login("eid", "eid");
		Cliente cli2 = u2.getCliente();
		if (cli2 != null) {
			System.out.println("Nome do Cliente: " + cli2.getNomeCli());
		}
	}
	//*/
}
